"""
题目描述：
设计一个图书管理系统的核心类结构，包含以下类：
1.	Book类：
o	属性：书名（title）、作者（author）、ISBN（isbn，私有属性__isbn）、是否借出（is_borrowed，默认False）；
o	方法：
	get_isbn()：返回ISBN（isbn的 getter 方法）；
	borrow()：将is_borrowed设为True，若已借出则返回False；
	return_book()：将is_borrowed设为False，若未借出则返回False；
	__str__()：返回图书信息字符串，格式为"{title} by {author} (ISBN: {isbn}) - {'已借出' if is_borrowed else '可借阅'}"。
2.	Library类：
o	属性：图书列表（books，存储Book实例）；
o	方法：
	add_book(book)：添加图书到列表，若ISBN已存在则不添加；
	find_by_author(author)：返回该作者所有图书的列表（按书名升序排序）；
	__call__()：返回图书馆当前可借阅图书的数量（调用方式：library()）。
要求：
测试代码：创建3本图书，添加到图书馆，模拟借阅、归还操作，并调用find_by_author和__call__方法验证功能。

"""
class Book:
    def __init__(self, title, author, isbn):
        self.title = title
        self.author = author
        self.__isbn = isbn
        self.is_borrowed = False

    def get_isbn(self):
        return self.__isbn

    def borrow(self):
        if self.is_borrowed:
            return False
        self.is_borrowed = True
        return True

    def return_book(self):
        if not self.is_borrowed:
            return False
        self.is_borrowed = False
        return True

    def __str__(self):
        return f"{self.title} by {self.author} (ISBN: {self.__isbn}) - {'已借出' if self.is_borrowed else '可借阅'}"

class Library:
    def __init__(self):
        self.books = []

    def add_book(self, book):
        if any(b.get_isbn() == book.get_isbn() for b in self.books):
            print(f"添加失败：ISBN {book.get_isbn()} 已存在。")
            return
        self.books.append(book)
        print(f"图书《{book.title}》添加成功。")

    def find_by_author(self, author):
        found_books = [book for book in self.books if book.author == author]
        return sorted(found_books, key=lambda b: b.title)

    def __call__(self):
        return sum(1 for book in self.books if not book.is_borrowed)


# --- 测试代码 ---
lib = Library()

# 创建图书
book1 = Book("Python编程：从入门到实践", "埃里克·马瑟斯", "9787115428028")
book2 = Book("流畅的Python", "卢西亚诺·拉马略", "9787115460011")
book3 = Book("Python Cookbook", "大卫·比斯利", "9787115331480")
book4_duplicate = Book("Python编程：从入门到实践", "埃里克·马瑟斯", "9787115428028") # 重复ISBN

# 添加图书
lib.add_book(book1)
lib.add_book(book2)
lib.add_book(book3)
lib.add_book(book4_duplicate) # 尝试添加重复ISBN

print("-" * 20)

# 借阅操作
print(f"借阅《{book1.title}》: {book1.borrow()}")
print(f"再次借阅《{book1.title}》: {book1.borrow()}")
print(f"当前可借阅数量: {lib()}")

# 归还操作
print(f"归还《{book1.title}》: {book1.return_book()}")
print(f"再次归还《{book1.title}》: {book1.return_book()}")
print(f"当前可借阅数量: {lib()}")

print("-" * 20)

# 按作者查找
author_to_find = "埃里克·马瑟斯"
authors_books = lib.find_by_author(author_to_find)
print(f"作者 '{author_to_find}' 的图书:")
for book in authors_books:
    print(f"  {book}")